package com.zhangjingcheng.yunyixia.service;

import com.zhangjingcheng.yunyixia.pojo.dto.LoadFileListDTO;
import com.zhangjingcheng.yunyixia.pojo.dto.RenameDTO;
import com.zhangjingcheng.yunyixia.pojo.dto.UploadDTO;
import com.zhangjingcheng.yunyixia.pojo.entity.FileInfo;
import com.zhangjingcheng.yunyixia.pojo.vo.FileVO;
import com.zhangjingcheng.yunyixia.pojo.vo.UploadVO;
import com.zhangjingcheng.yunyixia.result.PageResult;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface FileService {

    /**
     * 加载文件列表
     *
     * @param dto
     * @return
     */
    PageResult<FileVO> list(LoadFileListDTO dto);

    /**
     * S3文件上传
     *
     * @param file
     * @return
     */
    String s3Upload(MultipartFile file);

    /**
     * 上传文件
     *
     * @param dto
     * @return
     */
    UploadVO upload(UploadDTO dto);

    /**
     * 根据md5查询文件
     *
     * @param md5
     * @return
     */
    FileInfo findByMd5(String md5);

    /**
     * 获取图片
     *
     * @param id
     * @return
     */
    void getImage(Integer id, HttpServletResponse response);


    /**
     * 根据名称查询文件
     *
     * @param name
     * @return
     */
    FileInfo findByName(String name);



    /**
     * 文件重命名
     *
     * @param dto
     */
    void rename(RenameDTO dto);


    /**
     * 更新文件删除状态
     *
     * @param ids
     */
    void updateFlag(List<Integer> ids);

    /**
     * 删除文件
     *
     * @param ids
     */
    void deleteByIds(List<Integer> ids);

    /**
     * 文件下载
     *
     * @param id
     * @param response
     */
    void download(Integer id, HttpServletResponse response);

    /**
     * 获取所有文件
     *
     * @return
     */
    PageResult<FileVO> getAllFile(LoadFileListDTO dto);

    /**
     * 管理员删除文件
     * @param ids
     */
    void AdminDelFile(List<Integer> ids);

    /**
     * 管理员重命名文件
     * @param dto
     */
    void adminRenameFile(RenameDTO dto);

    /**
     * 更新用户空间
     * @param id
     * @param size
     * @param type
     */
    void updateUserSpace(Integer id, Long size,String type);
}
